<?
	
	include_once("funcoes.php");

	   /**************************************************************************
		* ATENÇÃO:
		* Caso seja enviado a variável 'acao' via GET ou POST, ela será verificada
		* e executada sua ação no trecho de código ABAIXO das Funções.
		**************************************************************************/
	
	  


	/*  __________________________________________________________________________________________
	   |																						  |
	   |						-----------> FUNÇÕES <-----------								  |
	   |__________________________________________________________________________________________| 
	*/
	
	
	/* Função: valorInserirSQL
	 * 
	 * Descrição: retorna o valor formatado correspondente ao seu tipo
	 *   		  e no padrão de Instrução SQL.
	 *  		  Ex.: -> text: 'bla bla bla' , -> double: 23.5
	 * 
	 * Parâmetros: $valor   - valor informado para o campo 
	 *			   $tipo    - tipo correspondente ao campo
	 *			   $default - valor padrão para o caso de $valor estar vazia
	 *
	 * Autor: Alexandre Varizi Ribeiro
	 * Data:  08/05/2012
	 */
	if (!function_exists("valorInserirSQL")) 
	{
			
		function valorInserirSQL($valor, $tipo) 
		{
			if (PHP_VERSION < 6) {
			
				/*
				-> Caso tenha sido tratado caracteres especiais ('), ("), (\) e NUL com "\" (barra invertida),
				   retira as "\"
				   
				get_magic_quotes_gpc - verifica se a o recurso magic_quetes_g (que define o estado para as 
									   aspas mágicas) está on
				stripslashes 		 - Dezfaz o efeito de stripslasjes, removendo as barras invertidas de uma string
				addslashes 			 - Retorna string com barras invertidas que precisam ser escapados para serem 
									   escapados. Ex.:('), ("), (\) e NUL 
				*/
				$valor = get_magic_quotes_gpc() ? stripslashes($valor) : $valor;
			}
			
			// Escapa os caracteres especiais numa string para usar em um comando SQL
			$valor = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($valor) : mysql_escape_string($valor);
			
			
			switch ($tipo) 
			{

				case "text":
				  $valor = ($valor != "") ? "'" . $valor . "'" : "NULL";
				  break;    
				case "long":
				case "int":
				  $valor = ($valor != "") ? intval($valor) : "NULL";
				  break;
				case "double":
				  $valor = ($valor != "") ? doubleval($valor) : "NULL";
				  break;
				case "date":
				  $valor = ($valor != "") ? "'" . $valor . "'" : "NULL";
				  break;
			}
				
			
			return $valor;
		}
	}
	
	
	
	/* Função: ultimoCodigo
	 * 
	 * Descrição: retorna o últico código (Maior código) da tabela
	 *			  especificada, ou zero caso não possua nenhum código
	 *			  inserido.
	 * 
	 * Parâmetros: $tabela   - tabela a ser realizada a consulta
	 *			   $database - base de dados
	 * 			   $conn     - conexão com a base de dados
	 *
	 * Autor: Alexandre Varizi Ribeiro
	 * Data:  08/05/2012
	 */
	if (!function_exists("ultimoCodigo")) 
	{		
		
		function ultimoCodigo($tabela, $database, $conn) 
		{
			$query = "";
			$ultimoCod = 0;
			
			switch ( strtolower($tabela) ) 
			{
				case "secao":
					$query = "SELECT MAX(codSecao) as ultimoCodigo FROM Secao";
				break;
				
				case "categoria":
					$query = "SELECT MAX(codCateg) as ultimoCodigo FROM Categoria";
				break;
				
				case "pergunta":
					$query = "SELECT MAX(codPergunta) as ultimoCodigo FROM Pergunta";
				break;
				
				case "entrevista":
					$query = "SELECT MAX(codEntrevista) as ultimoCodigo FROM Entrevista";
				break;
				
				case "municipio":
					$query = "SELECT MAX(codMunicipio) as ultimoCodigo FROM Municipio";
				break;    
				
				case "entrevista":
					$query = "SELECT MAX(codEntrevista) as ultimoCodigo FROM Entrevista";
				break;
				
				case "supervisao":
					$query = "SELECT MAX(codSupervisao) as ultimoCodigo FROM Supervisao";
				break;
				
				case "questao":
					$query = "SELECT MAX(codQuestao) as ultimoCodigo FROM Questao";
				break;
				
				case "resposta":
					$query = "SELECT MAX(codResposta) as ultimoCodigo FROM Resposta";
				break;
				
				case "preresposta":
					$query = "SELECT MAX(codPreResp) as ultimoCodigo FROM preResposta";
				break;
				
				case "categpreresp":
					$query = "SELECT MAX(codCategPreResp) as ultimoCodigo FROM categPreResp";
				break;
			}
			
			
			// Executando a Consulta SQL
			mysql_select_db($database, $conn);
			$result = mysql_query($query);
			
			if (!$result) {
				echo "Não foi possível executar a consulta ($query) no banco de dados: " . mysql_error();
				exit;
			}
			
			
			$row = mysql_fetch_assoc($result);
			
			if ( !is_null($row['ultimoCodigo']) && $row['ultimoCodigo'] > 0)
			{
				$ultimoCod = $row['ultimoCodigo'];
			}
					
			
			return $ultimoCod;	
		}
	}
	
	
	/* Função: ultimaOrdemPerg
	 * 
	 * Descrição: retorna a última ordem (maior ordem) da tabela de perguntas,
	 *			  ou zero caso não possua nenhuma ordem inserida.
	 * 
	 * Parâmetros: $secao    - codigo da seção
	 *			   $database - base de dados
	 * 			   $conn     - conexão com a base de dados
	 *
	 * Autor: Alexandre Varizi Ribeiro
	 * Data:  25/05/2012
	 */
	if (!function_exists("ultimaOrdemPerg")) 
	{		
		
		function ultimaOrdemPerg($secao, $database, $conn) 
		{
			$ultimaOrdem = 0;
			
			if ($secao > 0)
			{
				$query = "	SELECT MAX(ordem) as ultimaOrdem FROM Pergunta
							WHERE codSecao = " . $secao;

				// Executando a Consulta SQL
				mysql_select_db($database, $conn);
				$result = mysql_query($query);
				
				if (!$result) {
					return "Não foi possível executar a consulta ($query) no banco de dados: " . mysql_error();
					exit;
				}
				
				$row = mysql_fetch_assoc($result);
				
				if ( !is_null($row['ultimaOrdem']) && $row['ultimaOrdem'] > 0)
				{
					$ultimaOrdem = $row['ultimaOrdem'];
				}
					
			}
			
			return $ultimaOrdem;	
		}
	}
	
	
	/* Função: select_geral
	 * 
	 * Descrição: Realiza uma consulta ao banco de dados pela tabela 
	 *			  especificada. Deverá ser informado a tabela e um 
	 *			  array de campos a serem consultados; caso seja informado
	 * 			  NULL para $campos, retorna todos os campos.
	 * 
	 * Parâmetros: $tabela   - tabela a ser realizada a consulta
	 * 			   $campos   - array de campos a serem consultados
	 *			   $database - base de dados
	 * 			   $conn     - conexão com a base de dados
	 *
	 * Retorno:    $recordSet - conjunto de registros consultados	 
	 *
	 * Autor: Alexandre Varizi Ribeiro
	 * Data:  10/05/2012
	 */
	if (!function_exists('select_geral'))
	{
		function select_geral($tabela, $campos, $database, $conn)
		{
			
			$strCampos = " * ";
			$strQuery  = "";
			$recordSet = NULL;
			
			if ( is_array($campos) && count($campos) > 0)
			{
				$strCampos = implode(', ', $campos);
			}
			
			$strQuery = "SELECT $strCampos FROM " . $tabela;
			
			mysql_select_db($database, $conn);
			$recordSet = mysql_query($strQuery) or die(mysql_error());
			
			return $recordSet;
		}
	}
	
	
	/* Função: execute_query
	 * 
	 * Descrição: Executa uma consulta ao banco de dados, com
	 * 			  base na variável $query.
	 *
	 * Parâmetros: $query    - comandos SQL a serem executados
	 *			   $database - base de dados
	 * 			   $conn     - conexão com a base de dados
	 *
	 * Retorno:    $recordSet - conjunto de registros consultados	 
	 *
	 * Autor: Alexandre Varizi Ribeiro
	 * Data:  15/05/2012
	 */
	if (!function_exists('execute_query'))
	{
		function execute_query($query, $database, $conn)
		{
			
			$recordSet = NULL;
			
			mysql_select_db($database, $conn);
			$recordSet = mysql_query($query) or die(mysql_error());
			
			return $recordSet;
			
		}
	}
	
	/* Função: executeSQLCommands
	 * 
	 * Descrição: Executa os comandos SQL (INSERT, UPDATE e DELETE) passados 
	 *			  por parâmetro. Pode ser passado uma string contendo um comando
	 *			  SQL ou um array de comandos.
	 *
	 * Parâmetros: $commandSQL  - comando SQL ou array de comandos SQL
	 *			   $redirectTo  - página a ser redirecionada
	 *			   $database    - base de dados
	 * 			   $conn        - conexão com a base de dados
	 *
	 * Autor: Alexandre Varizi Ribeiro
	 * Data:  			   30/05/2012
	 * Última Modificação: 30/05/2012
	 */
	if (!function_exists('executeSQLCommands'))
	{
		function executeSQLCommands($command, $redirectTo, $database, $conn) 
		{
			// Se $command não é um array, ou seja, está sendo enviado um único comando...
			if ( ! is_array($command) ) 
			{
				mysql_select_db($database, $conn);
				$lResult = mysql_query($command);
				
				if (!$lResult)
					$msgErro = "Erro na execução dos comandos SQL </b>\n Query: " . $command . 
							   "<br />\n Error: (" . mysql_errno() . ") " . mysql_error();
			
			// Caso haja mais de um comando
			} else {
				
				mysql_select_db($database, $conn);
				mysql_query("BEGIN"); // Inicia a Transação
				
				for ($i = 0; $i < count($command); $i++ )
				{
					$lResult = mysql_query($command[$i]);
					
					if (! $lResult ) 
					{
						$msgErro = 	"Erro na execução dos comandos SQL </b>\n Query: " .  $command[$i] . 
									"<br />\n Error: (" . mysql_errno() . ") " . mysql_error();
						break;
					}
				}
				
				if ($lResult)
					mysql_query("COMMIT"); // Finaliza a Transação
				else
					mysql_query("ROLLBACK"); // Desfaz a transação
					
			}
			
			if ($lResult) 
			{
				$msg = "Operação realizada com sucesso!";
				
				if (! empty($redirectTo) )
				{
					if ( strpos($redirectTo, "?") )
						header( "Location: " . $redirectTo . "&msg=" . $msg);
					else 
						header( "Location: " . $redirectTo . "?msg=" . $msg);
						
				} else 
					echo $msg;
					
			} else 
			{
				echo $msgErro;
			}
		}
	}
	
	/* Função: fieldNames
	 * 
	 * Descrição: Recupera os nomes dos campos de uma consulta SQL.
	 *			  Retorna um array com os nomes dos campos.
	 *
	 * Parâmetros: $query - Consulta SQL a ser recuperada o 
	 *						nome dos campos
	 *
	 * Autor: Alexandre Varizi Ribeiro
	 * Data:  			   20/06/2012
	 * Última Modificação: 20/06/2012
	 */
	if (!function_exists('fieldNames'))
	{
		function fieldNames( $result ) {
	
			$arrFieldNames = array();	
			$count 		   = mysql_num_fields( $result );
		
			for ( $i = 0; $i < $count; $i++ ) {
				
				$arrFieldNames[] = mysql_field_name( $result, $i );
			
			}
			
			return $arrFieldNames;
		}
	}
	
	/*  __________________________________________________________________________________________
	   |																						  |
	   |			 -----------> VERIFICANDO EXISTÊNCIA DE AÇÃO <-----------					  |
	   |__________________________________________________________________________________________| 
	*/
	
	/* Veridicando se foi passado para a página a variável "acao" via GET ou POST.
	 * Caso tenha sido informada, realiza a ação referente. É usado principalmente
	 * via jquery (método $.ajax)
	 */
	 
	 $acao = "";
	 $acao = request_GET_POST('acao');
	 
	 if ( !empty($acao) )
	 {
		require_once('../cnn/conn.php'); // -> Conexão com a base de dados
		
		switch ( strtolower($acao) )
		{
			case "ultima_ordem":
				
				$secao = request_GET_POST('secao');
				
				if ( !empty($secao) )
				{				
					echo ultimaOrdemPerg($secao, $database_conn, $conn);
				}
				
			break;
			
			case "ultimocodigo":
						
				$tabela = request_GET_POST('tabela');

				if ( !empty($tabela) )
				{				
					echo ultimoCodigo($tabela, $database_conn, $conn);
				}
				
			break;
		}

	 }	
?>
